package com.tbit.uqbike.service.business;

import com.github.pagehelper.PageInfo;
import com.tbit.uqbike.object.pojo.*;
import com.tbit.uqbike.object.pojo.vo.OpSuggestionStatVO;

import java.util.Date;
import java.util.List;

/**
 * 建议service
 *
 * @author Leon
 * 2017年2月24日 下午4:09:17
 */
public interface SuggestionService {
    /**
     * 添加
     *
     * @param suggestion
     */
    void insert(Suggestion suggestion);

    /**
     * 根据建议id查询
     *
     * @param suggestionId
     * @return
     */
    Suggestion getBySuggestionId(Integer suggestionId);

    /**
     * 根据平台账户id查询
     *
     * @param accountId
     * @return
     */
    List<Suggestion> getByAccountId(Integer accountId);

    /**
     * 根据用户id查询
     *
     * @param userId
     * @return
     */
    List<Suggestion> getByUserId(Integer userId);

    /**
     * 处理
     *
     * @param suggestion
     * @param isSend
     */
    void handle(Suggestion suggestion, Integer isSend, Integer type);

    /**
     * 运维处理
     *
     * @param
     * @param
     */
    void handleByAccound(AccountUserSug accountUserSug);

    /**
     * 分页查询总数
     *
     * @param state
     * @param startTime
     * @param endTime
     * @param accountIdList
     * @return
     */
    Integer queryCount(Integer state, Long startTime, Long endTime, List<Integer> accountIdList, String phone, String title);

    /**
     * 分页查询
     *
     * @param state
     * @param startTime
     * @param endTime
     * @param rowCount
     * @param pageNO
     * @param sortName
     * @param accountIdList
     * @return
     */
    List<Suggestion> queryPage(Integer state, Long startTime, Long endTime, Integer rowCount, Integer pageNO,
                               String sortName, List<Integer> accountIdList, String phone, String title);

    /**
     * 查询某段时间内总数
     *
     * @param accountId
     * @param startTime
     * @param endTime
     * @return
     */
    Integer getCountByTime(Integer accountId, String startTime, String endTime);

    /**
     * 意见反馈导出
     *
     * @param
     * @return
     */
    List<SuggestionExport> export(List<Integer> accountIdList, Long startTime, Long endTime, Integer state, Integer type,
                                  String phone, String title);

    List<AccountSuggestion> queryPageByAccount(Integer state, Long startTime, Long endTime, Integer rowCount,
                                               Integer pageNO, String sortName, List<Integer> accountIdList, String phone,
                                               String title);


    /**
     * 分页查询运维意见总数
     *
     * @param state
     * @param startTime
     * @param endTime
     * @param accountIdList
     * @return
     */
    Integer queryCountByAccount(Integer state, Long startTime, Long endTime, List<Integer> accountIdList, String phone,
                                String title);


    PageInfo<SuggestionStat> getStatPage(Integer accountId, Integer rowCount, Integer pageNO, Integer state, Long startTime, Long endTime, Integer type);

    List<SuggestionStat> getStatList(Integer accountId, Integer state, Long startTime, Long endTime, Integer type);

    List<OpSuggestionStatVO> getSuggestionStat(Integer accountId, Long startTime, Long endTime);

    int queryAllCount(List<Integer> accountIds, Date startTime, Date endTime);

    /**
     * 批量处理
     *
     * @param suggestionIdList 意见id集合
     * @param isSend           是否发送短信 1发送 0不发送
     * @param type             处理类型 1客户端意见 2运维端意见
     * @param reply            回复内容
     */
    void batchHandle(List<Integer> suggestionIdList, Integer isSend, String reply, Integer type);

    /**
     * 根据用户id和区域id集合查询
     *
     * @param userId        用户id
     * @param accountIdList 区域id集合
     * @param startTime     开始时间
     * @param endTime       结束时间
     */
    List<Suggestion> selectByAccountIdList(Integer userId, List<Integer> accountIdList, Date startTime, Date endTime);
}
